package com.lww.integral;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.apache.tomcat.jni.Thread;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class CodeGenerator {


//    private native String aa();

    public static void main(String[] args) {
        // 需要构建一个 代码自动生成器 对象
        AutoGenerator mpg = new AutoGenerator();
        // 配置策略

        // 全局配置
        // 1、全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir"); //得到项目路径
        //下载到哪里
        gc.setOutputDir(projectPath + "/spring-cloud-provider-dept-8001/src/main/java");
        //作者署名
        gc.setAuthor("SHEN");
        //是否打开资源管理器
        gc.setOpen(false);
        // 是否覆盖 原来生成的
        gc.setFileOverride(false);
        // 去Service的I前缀
        gc.setServiceName("%sService");
        //默认主键算法 为自增
        gc.setIdType(IdType.AUTO);
        //设置日期的类型
        gc.setDateType(DateType.ONLY_DATE);
        //是否配置Swagger2
        gc.setSwagger2(true);
        //吧全局配置存入到生成器里面
        mpg.setGlobalConfig(gc);

        //2 设置数据源
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        //配置数据员的路径
        dataSourceConfig.setUrl("jdbc:mysql://123.57.103.223:3306/telecombusinesshall?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC");
        //配置加载驱动的路径
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        //配置用户名
        dataSourceConfig.setUsername("root");
        //配置密码
        dataSourceConfig.setPassword("root");
        //配置数据库类型
        dataSourceConfig.setDbType(DbType.MYSQL); //设置为mysql
        //吧数据库配置存入到全局配置里面
        mpg.setDataSource(dataSourceConfig);


        /**
         * 3.包配置
         */
        PackageConfig pc = new PackageConfig();
        //包的名字
        pc.setModuleName("userTest");
        //父路径
        pc.setParent("com.lww");
        //实体包名
        pc.setEntity("entity");
        //dao层包名
        pc.setMapper("mapper");
        //service包名
        pc.setService("service");
        //controller包名
        pc.setController("controller");
        //把包配置存入到 代码生成器
        mpg.setPackageInfo(pc);


        // 4.策略配置
        StrategyConfig strategy = new StrategyConfig();
        //实现创建的表名 可以同时设置多个表
        strategy.setInclude("tab_ggcard_stock");
        //设置包的名命规则 underline_to_camel 下划线转驼峰名命
        strategy.setNaming(NamingStrategy.underline_to_camel);
        //列的名字  名命规则 underline_to_camel 下划线传驼峰名命
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//        strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
        //是否开启lombok自动注解
        strategy.setEntityLombokModel(true);
//        配置逻辑删除
        strategy.setLogicDeleteFieldName("deleted");

        /*
        //自动填充配置
        TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT); //设置自动跟新时间
        TableFill gmtModified = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE); //设置自动修改时间
        List<TableFill> tableFills = Arrays.asList(gmtCreate, gmtModified);
        strategy.setTableFillList(tableFills);
        */
        //乐观锁
        strategy.setVersionFieldName("version");

        strategy.setRestControllerStyle(true); //开启驼峰名命
        strategy.setControllerMappingHyphenStyle(true); // localhost:8080/hello_id_2
        mpg.setStrategy(strategy);
        // 公共父类


//        //指定自定义模板路径, 位置：/resources/templates/entity2.java.ftl(或者是.vm)
//        //注意不要带上.ftl(或者是.vm), 会根据使用的模板引擎自动识别
//        TemplateConfig templateConfig = new TemplateConfig()
//                .setEntity("templates/entity2.java");
//
//        //配置自定义模板
//        mpg.setTemplate(templateConfig);
//
//        InjectionConfig injectionConfig = new InjectionConfig() {
//            //自定义属性注入:abc
//            //在.ftl(或者是.vm)模板中，通过${cfg.abc}获取属性
//            @Override
//            public void initMap() {
//                Map<String, Object> map = new HashMap<>();
//                map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
//                this.setMap(map);
//            }
//        };
//        //配置自定义属性注入
//        mpg.setCfg(injectionConfig);


        mpg.execute();


    }
}
